<?php 
	namespace Home\Controller;
	use Think\Controller; 
	class UserController extends CommonController{
		/**
		 * 用户个人页视图
		 */
		public function index(){
			$id=I('get.id');
			$name=explode(':',I('get.name'))[0];
			if($id){
				$where=array('uid'=>$id);
				$userinfo=M('userinfo')->where($where)->field('truename,face50,face80,style',true)->find();
			}else if($name){
				$where=array('account'=>$name);
				$db=M('user');
				$uid=$db->where($where)->field('id')->find();
				$id=$uid['id'];
				$where=array('uid'=>$uid['id']);
				$userinfo=M('userinfo')->where($where)->field('truename,face50,face80,style',true)->find();
			}else{
            	$this->error('譔用户不存在的兄弟',__ROOT__,2);die();                        
			}
			if (!$userinfo) {
            	$this->error('譔用户不存在的兄弟',__ROOT__,2);die();                        
 			}			
			$weibo=D('Weibo');
			$where=array('uid'=>$userinfo['uid']);
 			//用户的基本信息
			$this->userinfo=$userinfo;
			//用户发布的微博
			$count=$weibo->where($where)->count();
			$Page=new \Think\Page($count,8);
			$result=$weibo->limit($Page->firstRow.','.$Page->listRows)->getAll(array('weibo_weibo.uid'=>$userinfo['uid']));
			$this->page=$Page->show();
			//分页后输出
			$this->weibo=$result;
			//用户关注的人的username,face8,id
			$follow=M('follow')->where(array('fans'=>$id))->field('follow')->select();
			//用户的粉丝
			$fans=M('follow')->where(array('follow'=>$id))->field('fans')->select();
			//一定不要望记新用户是什么数据都没有的
	         if($follow[0]){
	         	foreach($follow as $key => $value){
	         		$follow[$key]=$value['follow'];
	         	}
	         }
	         if($fans[0]){
	         	foreach($fans as $key => $value){
	         		$fans[$key]=$value['fans'];
	         	}
	         }	         
	         //我的关注
	         //是否在缓存或是否己过期
	 	         //explode:字符串变数组
		         //implode:数组变字符串
		         $aboutUserId=implode(',',$follow);
		         //提取用户关注的人的相关数据
		         $where=array('uid'=>array('in',$aboutUserId));
		         $follow_user=M('userinfo');
		         $follow_user_result=$follow_user->where($where)->field('username,face80,id')->select();
		         //设置一下缓存一小时的
		         S('follow_'.$id.'1',$follow_user_result,3600);
	         //我的粉丝
	 	         //explode:字符串变数组
		         //implode:数组变字符串
		         $aboutUserId=implode(',',$fans);
		         //提取用户关注的人的相关数据
		         $where=array('uid'=>array('in',$aboutUserId));
		         $fans_user=M('userinfo');
		         $fans_user_result=$fans_user->where($where)->field('username,face80,id')->select();
		         //设置一下缓存一小时的
		         S('fans_'.$id.'1',$fans_user_result,3600);
	         $this->follow=$follow_user_result;
	         $this->fans=$fans_user_result;
	         //提取用户的粉丝的数据
			 $this->display();
		}	
		/**
		 * 用户关注与粉丝列表
		 * @return [type] [description]
		 */
		public function followList(){
			//用户id
			$uid=I('get.uid');
			//区分关注与粉丝1,关注，0粉丝
			$type=I('get.type');
			$db=M('follow');
			//根据type的值来确定查的是用户的粉丝还是用户的关注
			//1为真就代表查的是用户关注的人
			//0为假就代表查的是用户的粉丝
			$where=$type?array('fans'=>$uid):array('follow'=>$uid);
			$field=$type?'follow':'fans';
			$count=$db->where($where)->count();
			//20条一页
			$Page=new \Think\Page($count,20);
			$this->username=M('userinfo')->where(array('uid'=>$uid))->getField('username');
			//select查不出的话，返回的是空一维数组
			$uids=$db->field($field)->where($where)->limit($Page->firstRow.','.$Page->listRows)->select();
			//一定要注意这个问题，有可能没有数据返回一个空数组不能foreach
			if($uids){
				foreach ($uids as $key => $value) {
					//根据type来确定，返回数组的键名不同要注意下
					//组合用户关注的人或粉丝的id进行组合变成一维，以便在in条件在使用
					$uids[$key]=$type?$value['follow']:$value['fans'];
				}
				//一维数组可以直接做为in的条件
				$where=array('uid'=>array('IN',$uids));
				$field='face50,username,sex,location,follow,fans,weibo,uid';
				$users=M('userinfo')->where($where)->field($field)->select();
				$this->users=$users;
			}
			//看用户关注的粉丝或关注与本用户(登录在本机的用户)的关系
			$where=array('fans'=>session('uid'));
			$follow=$db->where($where)->field('follow')->select();
			//继续二维变一维
			if ($follow) {
				foreach ($follow as $key => $value) {
					$follow[$key]=$value['follow'];
				}
			}
			$where=array('follow'=>session('uid'));
			$fans=$db->where($where)->field('fans')->select();
			if ($fans) {
				foreach ($fans as $key => $value) {
					$fans[$key]=$value['fans'];
				}
			}
			$this->type=$type;
			$this->count=$count;
			//本用户的关注和粉丝，也就登录用户的关注和粉丝放在模板中与此用户的关注和粉丝id进行in_array，fo
			//llow和fans中都成立存就就代
			//表这个用户与登录用户是互相关注的关系
			$this->follow=$follow;
			$this->fans=$fans;
			$this->display();
		}
		/**
		 * 空操作  $name [空操作的名i字]
		 */
		public function _empty($name){
			$this->_getUrl($name);
		}
		/**
		 * 处理用户名空操作，获得用户id，跳转至用户个人页
		 */
		private function _getUrl($name){
			//过滤一下
			$name=htmlspecialchars($name);
			$where=array('username'=>$name);
			$uid=M('userinfo')->where($where)->getField('id');
			if(!$uid){
				$this->redirect('index/index');
			}else{
				//跳转到个人页，根号	
				$this->redirect('/'.$uid);				
			}
		}
		//用户收藏列表
		public function keep(){
			$uid=session('uid');
			//视图模型的查询条件一定要第一个表点上字段
			//这个字段也不一定是视图模型所定义里的，只有定义表中有就行了
			$where=array('keep.uid'=>$uid);
			$db=D('KeepView');
			$count=$db->where($where)->count();
			//6条微博一页
			//这些分页啥的都是发送一个请示加载下一页的数据
			$Page = new \Think\Page($count,6);
	        $keepResult=$db->limit($Page->firstRow.','.$Page->listRows)->getAll($where);
	        $this->page=$Page->show();
	        $this->weibo=$keepResult;
			//指定模板
			$this->display('weiboList');
		}
		//取消收藏微博
		public function cancelKeep(){
			if (!IS_AJAX) {
            	$this->error('不存在这个操作',__ROOT__,2);die();                        
			}
			$kid=I('post.kid',intval);
			$wid=I('post.wid',intval);
			if(M('keep')->delete($kid)){
				M('weibo')->where(array('id'=>$wid))->setDec('keep');
				echo 1;
			}else{
				echo 0;
			}
		}
		//私信视图
		public function letter(){
			set_msg(session('uid'),2,true);
			$uid=session('uid');
			$where=array('useridd'=>$uid);
			//找不到d模形的话，d就相当于m了，视图模型啥的你如果取名长的话，别忘写了
			$db=D('LetterView');
	        $count=$db->where($where)->count();
	        $Page = new \Think\Page($count,8);
	        $letterResult=$db->limit($Page->firstRow.','.$Page->listRows)->order('time desc')->where($where)->select();
	        $this->page=$Page->show();
	        $this->letter=$letterResult;
	        $this->count=$count;
			$this->display();
		}
		//私信数据操作，返回前端一个提示
		public function letterSend(){
			if (!IS_AJAX) {
            	$this->error('不存在这个操作',__ROOT__,2);die();                        
			}
			$name=I('post.name');
			$where=array('account'=>$name);
			//收件人的id
			$uid=M('user')->where($where)->getField('id');
			if(!$uid){
				echo 0;
				die;
			}
			$data=array('from'=>session('uid'),'uid'=>$uid,'time'=>time(),'content'=>I('post.content'));
			if(M('letter')->add($data)){
				set_msg($uid,2);
				echo 1;
			}else{
				echo 0;
			}
		}
		//异频删除私信
		public function delLetter(){
			if (!IS_AJAX) {
            	$this->error('不存在这个操作',__ROOT__,2);die();                        
			}
			$lib=I('post.lid');
			if (M('letter')->delete($lib)) {
				echo 1;
			}else{
				echo 0;
			}			
		}
		//评论视图
		public function comment(){
			//别想用视图了，是真的坑
			$db=M('comment');
			$where=array('weibo_comment.reply'=>session('uid'));
			set_msg(session('uid'),1,true);
	        $count=$db->where($where)->count();
	        $Page = new \Think\Page($count,10);
	        $commentResult=$db->limit($Page->firstRow.','.$Page->listRows)->join('weibo_userinfo as u ON weibo_comment.uid=u.uid','LEFT')->field('weibo_comment.*,u.username,u.face50,u.uid')->where($where)->order('time desc')->select();
	        $this->page=$Page->show();
	        $this->count=$count;
	        $this->comment=$commentResult;
			$this->display();
		}
		//评论回复
		public function reply(){
			if(!IS_AJAX){
            	$this->error('不存在这个操作',__ROOT__,2);die();                        				
			}
			$data=array('content'=>I('post.content'),'wid'=>I('post.wid'),'time'=>time(),'uid'=>session('uid'));
			if(M('comment')->add($data)){
				M('weibo')->where(array('id'=>$data['wid']))->setInc('comment');
				echo 1;
			}else{
				echo 0;
			}
		}
		//删除评论
		public function delComment(){
			if (!IS_AJAX) {
            	$this->error('不存在这个操作',__ROOT__,2);die();                        				
			}
			if(M('comment')->delete(I('post.cid'))){
				M('weibo')->where(array('id'=>I('post.wid')))->setDec('comment');
				echo 1;
			}else{
				echo 0;
			}
		}
		//@到我的
		public function atme(){
			$where=array('uid'=>session('uid'));
			$wid=M('atme')->where($where)->field('wid')->select();
			set_msg(session('uid'),3,true);
			//用In的话肯定是要二维转一维了
			if ($wid) {
				foreach($wid as $k=>$v){
					$wid[$k]=$v['wid'];
				}
				//新用户没有存在@数据
			}else{
				$this->weibo='';
				$this->atme=1;
				$this->display('weiboList');
				die;
			}
			$where=array('weibo_weibo.id'=>array('IN',$wid));
			$db=D('weibo');
	        $count=$db->where($where)->count();
	        $Page = new \Think\Page($count,8);
	        $weiboResult=$db->limit($Page->firstRow.','.$Page->listRows)->order('time desc')->getAll($where);
	        $this->weibo=$weiboResult;
	        $this->atme=1;
	        $this->display('weiboList');
		}
	}	
?>
